package game;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

public class PokerGame02 {
    //静态代码块
    //特点：随着类的加载而在加载的，而且只执行一次。
    //牌盒
    //♥3 ♣3

    //此时我们只要把牌跟序号产生对应关系就可以了，不需要按照序号进行排序，所以只要HashMap就可以了
    static HashMap<Integer, String> hm = new HashMap<>();
    static ArrayList<Integer> list = new ArrayList<>();

    static {
        // 准备牌
        // "♦", "♣", "♥", "♠"
        // "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"
        String[] color = {"♦", "♣", "♥", "♠"};
        String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};

/*
        {1=♦3, 2=♦4, 3=♦5, 4=♦6, 5=♦7, 6=♦8, 7=♦9, 8=♦10, 9=♦J, 10=♦Q, 11=♦K, 12=♦A,
        13=♦2, 14=♣3, 15=♣4, 16=♣5, 17=♣6, 18=♣7, 19=♣8, 20=♣9, 21=♣10, 22=♣J, 23=♣Q,
        24=♣K, 25=♣A, 26=♣2, 27=♥3, 28=♥4, 29=♥5, 30=♥6, 31=♥7, 32=♥8, 33=♥9, 34=♥10,
        35=♥J, 36=♥Q, 37=♥K, 38=♥A, 39=♥2, 40=♠3, 41=♠4, 42=♠5, 43=♠6, 44=♠7, 45=♠8, 46=♠9,
        47=♠10, 48=♠J, 49=♠Q, 50=♠K, 51=♠A, 52=♠2}
        由于起牌是按照牌号来的，所以要已牌号为主要。交换color和number即可
*/
/*
        {1=♦3, 2=♣3, 3=♥3, 4=♠3, 5=♦4, 6=♣4, 7=♥4, 8=♠4, 9=♦5, 10=♣5, 11=♥5, 12=♠5, 13=♦6, 14=♣6,
         15=♥6, 16=♠6, 17=♦7, 18=♣7, 19=♥7, 20=♠7, 21=♦8, 22=♣8, 23=♥8, 24=♠8, 25=♦9, 26=♣9,
         27=♥9, 28=♠9, 29=♦10, 30=♣10, 31=♥10, 32=♠10, 33=♦J, 34=♣J, 35=♥J, 36=♠J, 37=♦Q, 38=♣Q,
         39=♥Q, 40=♠Q, 41=♦K, 42=♣K, 43=♥K, 44=♠K, 45=♦A, 46=♣A, 47=♥A, 48=♠A, 49=♦2, 50=♣2,
         51=♥2, 52=♠2}
*/

        //定义一个序号
        int num = 1;
        for (String n : number) {
            //n 依次表示每一个数字
            for (String c : color) {
                //c依次表示每一种花色
                hm.put(num, c + n);
                list.add(num);
                num++;
            }
        }
        hm.put(num, "小王");
        list.add(num);
        num++;
        hm.put(num, "大王");
        list.add(num);
    }

    public PokerGame02() {
        //洗牌
        Collections.shuffle(list);
        //发牌
        TreeSet<Integer> dizu = new TreeSet<>();
        TreeSet<Integer> player1 = new TreeSet<>();
        TreeSet<Integer> player2 = new TreeSet<>();
        TreeSet<Integer> player3 = new TreeSet<>();
        //遍历牌盒得到每一张牌
        for (int i = 0; i < list.size(); i++) {
            int poke = list.get(i);
            //前三张发给底牌(地主的牌)
            if (i <= 2) {
                dizu.add(poke);
                //给三个玩家轮流发牌
            } else if (i % 3 == 0) {
                player1.add(poke);
            } else if (i % 3 == 1) {
                player2.add(poke);
            } else {
                player3.add(poke);
            }
        }
        //看牌
        lookPoker("周润发", player1);
        lookPoker("刘德华", player2);
        lookPoker("周星驰", player3);
        lookPoker("底牌", dizu);

    }
    public void lookPoker(String name, TreeSet<Integer> ts) {
        System.out.print(name + ": ");
        //遍历TreeSet集合得到每一个序号，再拿着序号到Map集合中去找真正的牌
        for (Integer t : ts) {
            String poke = hm.get(t);//得到每一个牌
            System.out.print(poke+" ");

        }
        System.out.println();
    }
}
